package com.sl.hx.shop.utils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 字符串类型判断工具类
 *
 * @author hwg
 * @date 2017/11/8
 */

public class StringUtil {

    /**
     * 字符串开头是否是整型
     *
     * @param str
     * @return
     */
    public static boolean isNumeric(String str) {
        Pattern pattern = Pattern.compile("[0-9]*");
        Matcher isNum = pattern.matcher(str.charAt(0) + "");
        if (!isNum.matches()) {
            return false;
        }
        return true;
    }

    /**
     * 将身份证号除了前6位和后4位都变为星号
     *
     * @param idCard
     * @return
     */
    public static String formatIdcard(String idCard) {
        return replaceAction(idCard, "(?<=\\d{6})\\d(?=\\d{4})");
    }
    private static String replaceAction(String idCard, String regular) {
        return idCard.replaceAll(regular, "*");
    }

    /**
     * 验证手机号是否正确
     *
     * <p>移动：134(0-8)、135、136、137、138、139、147、150、151、152、157、158、159、178、182、183、184、187、188</p>
     * <p>联通：130、131、132、145、155、156、171、175、176、185、186</p>
     * <p>电信：133、153、173、177、180、181、189</p>
     * <p>全球星：1349</p>
     * <p>虚拟运营商：170</p>
     *
     * @param mobile
     * @return
     */
    public static boolean isMobileCorrent(String mobile){
        String regex = "^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,1,3,5-8])|(18[0-9])|(147))\\d{8}$" ;
        return mobile.matches(regex) ;
    }

    /**
     * 验证身份证
     * @param idCard
     * @return
     */
    public static boolean isIdCardCorrent(String idCard){
        String regexIdCard15 = "^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$" ;
        String regexIdCard18 = "^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9Xx])$" ;

        boolean isCorrent = idCard.matches(regexIdCard15) || idCard.matches(regexIdCard18) ;

        return isCorrent ;
    }

    /**
     * 验证银行卡号
     * @param bankCardNo
     * @return
     */
    public static boolean isBankCardCorrent(String bankCardNo){
        String regex = "^\\d{19}$" ;
        boolean isCorrent = bankCardNo.matches(regex) ;
        return isCorrent ;
    }

}
